PostgerSQL 安全管理 自签名私有证书

1 背景知识

自签名私有证书只能加密连接,并不能认证服务器或者客户端身份。

2 证书准备

1、要为服务器创建一个有效期为365天的简单自签名证书,可以使用下面的OpenSSL命令。
2、将node1替换为服务器的主机名:

mkdir ~/.ssl && cd ~/.ssl
openssl req -new -x509 -days 365 -nodes -text -out server.crt \
-keyout server.key -subj "/CN=node1"

3、为证书分配合适的权限。

chmod og-rwx server.key
Warning

1、如果文件的权限比这个更自由,数据库将拒绝使用该文件。
2、尽管可以使用自签名证书进行测试,但是在生产中应该使用由证书颁发机构(CA)(通常是企业范围的根CA)签名的证书。

3 数据库配置SSL

3.1 将server .crt和server.key移动到$PGDATA

cd ~/.ssl
mv server.crt server.key $PGDATA

3.2 配置postgresql.conf. 打开ssl

vi $PGDATA/postgresql.conf 

--------------------input------------------------------
ssl = on
#ssl_ca_file = ''
ssl_cert_file = 'server.crt'
#ssl_crl_file = ''
ssl_key_file = 'server.key'
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'   ## 这个保持默认即可

3.3 配置pg_hba.conf, 强制让客户端使用ssl连接数据库

vi $PGDATA/pg_hba.conf

--------------------input------------------------------
hostssl    all             all             127.0.0.1/32            scram-sha-256
hostssl    all             all             192.168.10.0/24         scram-sha-256

3.4 重启数据库

pg_ctl restart 

4 客户端连接和验证

psql -h 127.0.0.1 -U postgres -d testdb
//屏幕输出:
Password for user postgres:
psql (12.9)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.